#!/bin/bash

# 生成当前时间戳
TIMESTAMP=`date +%y-%m-%d_%H:%M:%S`

# 获取项目可执行jar文件
OBJ_DIR=`pwd | sed 's/\/opt\///g'`
SRC_FILE="${OBJ_DIR}.jar"

# 判断项目当前可执行文件是否存在
if [ ! -f "$SRC_FILE" ]; then
    echo "$SRC_FILE"不存在
    exit
fi
# 判断是否输入要更新的文件
if [ -z $1 ]; then
    echo "未指令要更新的源文件"
    exit
fi

# 项目PID
OBJ_PID=`ps -eo pid,comm,cmd | grep ${SRC_FILE} | grep -v 'grep' | grep -v 'sh' | sed 's/\s//g' | sed 's/java.*//g'`
# 杀死项目后重启
kill -9 ${OBJ_PID}
echo "杀死 ${SRC_FILE} -> ${OBJ_PID}"

# 备份当前程序
\cp $SRC_FILE ${SRC_FILE}.bak.${TIMESTAMP}
echo "备份 ${SRC_FILE}.bak.${TIMESTAMP}"

# 使用更新程序覆盖当前程序
cp -f $1 $SRC_FILE
echo "使用 \"$1\" 覆盖 ${SRC_FILE}"

# 重启目标程序
nohup java -jar $SRC_FILE >> ${OBJ_DIR}.log 2>&1 &
echo "重启 \"nohup java -jar $SRC_FILE >> ${OBJ_DIR}.log 2>&1 &\" "
echo "日志 ${OBJ_DIR}.log"

for (( i=15; i>0; i-- ))
do
    printf "=====================[ %-03s 秒]后输出日志===================\r" $i
    sleep 1
done
echo ""

# 打印日志
tailf ${OBJ_DIR}.log





